Technote 1067

Traditional Device Drivers: Sync or Swim
or, "I've Got the vSyncWait Blues"


ñ⁄éü

ÉfÉoÉCÉXÉhÉâÉCÉoÇä«óùÇ∑ÇÈ 2 ǬÇÃÉãÅ[Éã

éñó·Ç…ÇÊÇÈèÿñæ

ÉfÉbÉhÉçÉbÉNÇÃâÒî

ÉãÅ[ÉãÇèÿñæÇ∑ÇÈó·äO

óvñÒ
àÍî ìIÇ»É\ÉtÉgÉEÉFÉAÉVÉXÉeÉÄÇΔìØólÅAíNLJǙÉãÅ[ÉãDžǵÇΩǙǡǃǢÇÈå¿ÇËÅAMac OS ÇÕê≥èÌÇ…ìÆçÏǵNjÇ∑ÅBàÍî ìIÇ» Toolbox ÉIÉyÉåÅ[ÉVÉáÉìÇÃèÍçáÇÕÅADZÇÍÇÁÇÃÉãÅ[ÉãÇÕǩǻÇËóeà’Ç…óùâÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBǵǩǵÅAì`ìùìIÇ» Mac OS ÉfÉoÉCÉXÉhÉâÉCÉo (DRVR) ÇÕÅAǪÇÃñ{óàÇÃê´éøÇ©ÇÁǵǃÅAï°éGÇ»ÉvÉçÉOÉâÉÄÇ≈džÇËÅAǪÇÍÇÁÇÃìÆçÏÇä«óùÇ∑ÇÈÉãÅ[ÉãÇÕǻǩǻǩóùâÇ≈Ç´Ç‹ÇπÇÒÅB

DZÇà TECHNOTE Ç≈ÇÕÅAì`ìùìIÇ» Mac OS ÉfÉoÉCÉXÉhÉâÉCÉoÇèëÇ≠ÇΔÇ´ÇÃäÎåØÇÃàÍǬÅAǬNjÇËÅAdžÇÈÉfÉoÉCÉXÉhÉâÉCÉoÇ©ÇÁï ÇÃÉfÉoÉCÉXÉhÉâÉCÉoÇìØä˙ìIÇ…åƒÇ—èoÇ∑ÇΔÇ´Ç…î≠ê∂Ç∑ÇÈÉfÉbÉhÉçÉbÉNÇÃâ¬î\ê´Ç…ǬǢǃê‡ñæÇµÇ‹Ç∑ÅBDZǧǵÇΩÉfÉbÉhÉçÉbÉNÇ™î≠ê∂Ç∑ÇÈÇ¢Ç≠ǬǩÇÃÉPÅ[ÉXÇãÔëÃìIÇ…ê‡ñæÇµÅAÇ≥ÇÁÇ…ÉfÉbÉhÉçÉbÉNÇÃî≠ê∂ÇâÒîÇ∑ÇÈï˚ñ@DžǬǢǃLJâê‡ÇµÇ‹Ç∑ÅB

DZÇà TECHNOTE Ç≈ÇÕÅAì«é“ÇΔǵǃÅAì`ìùìIÇ» Mac OS ÉfÉoÉCÉXÉhÉâÉCÉoÅAì¡Ç…ÅAëºÇÃÉfÉoÉCÉXÉhÉâÉCÉoÇåƒÇ—èoÇ∑ÉhÉâÉCÉoÇèëǢǃǢÇÈÉfÉxÉçÉbÉpÇëzíËǵǃǢNjÇ∑ÅBÇ‹ÇΩÅAì`ìùìIÇ» Mac OS ÉfÉoÉCÉXÉhÉâÉCÉoÇÃì‡ïîç\ë¢Ç…ä÷êSÇéùǡǃǢÇÈêlDžLJéQçlÇ…Ç»ÇÈÇΔévǢNjÇ∑ÅB


ÉfÉoÉCÉXÉhÉâÉCÉoÇä«óùÇ∑ÇÈ 2 ǬÇÃÉãÅ[Éã
ì`ìùìIÇ» Macintosh ÉfÉoÉCÉXÉhÉâÉCÉoÇèëÇ≠ÇΔÇ´Ç…ÇÕÅA2 ǬÇÃèdóvÇ»ÉãÅ[ÉãDžǵÇΩǙǧïKóvǙdžÇËÇ‹Ç∑ÅB

ÉãÅ[Éã #1
ÉfÉoÉCÉXÉhÉâÉCÉoÇîÒìØä˙ìIÇ…åƒÇ—èoÇ∑DZÇΔÇ™Ç≈Ç´ÅAǩǬï ÇÃÉfÉoÉCÉXÉhÉâÉCÉoÇåƒÇ—èoÇ∑èÍçáÅAǪÇÃÉhÉâÉCÉoLJîÒìØä˙ìIÇ…åƒÇ—èoÇ∑ïKóvǙdžÇËÇ‹Ç∑ÅB

ÉãÅ[Éã #1 DžǵÇΩÇ™ÇÌǻǢÇΔÅAÉVÉXÉeÉÄÇÉfÉbÉhÉçÉbÉNÇ≥ÇπǃǵNjǧäÎåØÇ™Ç†ÇËÅAÉÜÅ[ÉUÇ…ÇΔǡǃîjã«ìIÇ»åãâ Ç™ê∂Ç∂ÇÈâ¬î\ê´Ç™Ç†ÇËÇ‹Ç∑ÅB

íçà”:
Andrew S. Tanenbaum ÇÃÅwModern Operating SystemsÅxÇ…ÇÊÇÈÇΔÅAÅuÉvÉçÉZÉXÇÃÉZÉbÉgÇ™ÉfÉbÉhÉçÉbÉNÇ…ä◊ÇÈÇÃÇÕÅAǪÇÃÉZÉbÉgÇ…ä‹Ç‹ÇÍÇÈäeÉvÉçÉZÉXǙǪÇÃÉZÉbÉgì‡ÇÃï ÇÃÉvÉçÉZÉXÇ…ÇÊǡǃÇÃÇ›î≠ê∂Ç∑ÇÈÉCÉxÉìÉgÇë“Çøë±ÇØÇÈÇΔÇ´Ç≈Ç∑ÅvÇΩÇΔǶnjÅAì«é“ÇÃêMóäÇ≈Ç´ÇÈÉfÉBÉXÉNÉhÉâÉCÉoÇìæÇÈÇ‹Ç≈éÑǙDZÇà TECHNOTE ÇèëÇ´èIǶÇÈDZÇΔÇ™Ç≈Ç´Ç∏ÅAìØéûDžDZÇà TECHNOTE Çì«Ç›èIǶÇÈÇ‹Ç≈ÅAì«é“Ç™êMóäÇ≈Ç´ÇÈÉfÉBÉXÉNÉhÉâÉCÉoÇäJî≠Ç∑ÇÈDZÇΔÇ™Ç≈ǴǻǢèÍçáÅAÇÌÇÍÇÌÇÍÇÕÉfÉbÉhÉçÉbÉNÇ…ä◊ÇÈDZÇΔÇ…Ç»ÇËÇ‹Ç∑ÅBêlä‘Ç…ÇΔǡǃÅAÉfÉbÉhÉçÉbÉNÇâÒîǵÇΩÇËÅAÉfÉbÉhÉçÉbÉNÇ©ÇÁî≤ÇØèoÇ∑DZÇΔÇÕïKÇ∏ǵLJïsâ¬î\Ç≈ÇÕdžÇËÇ‹ÇπÇÒÇ™ÅAÉRÉìÉsÉÖÅ[É^Ç…ÇÕǪÇÒÇ»å|ìñÇÕÇ≈Ç´Ç‹ÇπÇÒÅB



ÉãÅ[Éã #2
ÉfÉoÉCÉXÉhÉâÉCÉoÇîÒìØä˙ìIÇ…åƒÇ—èoÇ∑DZÇΔÇ™Ç≈Ç´ÇÈèÍçáÇÕÅAdžÇΩǩLJîÒìØä˙ìIÇ…åƒÇ—èoÇ≥ÇÍǃǢÇÈÇÊǧDžÅAèÌÇ…ÉIÉyÉåÅ[ÉVÉáÉìÇé¿çsǵǃÇ≠ÇæÇ≥Ç¢ÅB

åæÇ¢ä∑ǶÇÍÇŒÅADZÇÃÉIÉyÉåÅ[ÉVÉáÉìÇ™ìØä˙ìIÇ≈džÇÈÇ©îÒìØä˙ìIÇ≈džÇÈÇ©ÇämîFÇ∑ÇÈÇΩÇflÇ…ÉeÉXÉgÇçsÇÌǻǢÇ≈Ç≠ÇæÇ≥Ç¢ÅBÇ‹ÇΩÅAǪÇÍǺÇÍÇÃèÍçáÇ≈àŸÇ»ÇÈèàóùÇé¿çsǵǻǢÇ≈Ç≠ÇæÇ≥Ç¢ÅB

ÉãÅ[Éã #2 DžǵÇΩÇ™ÇÌǻǢÇΔÅAÉVÉXÉeÉÄÇÕä˙ë“Ç…îΩǵǃÅAäÑÇËçûÇ›éûÇ…ïsê≥Ç»ìÆçÏÇé¿çsÇ∑ÇÈâ¬î\ê´Ç™Ç†ÇËÇ‹Ç∑ÅBÇΩÇΔǶnjÅAÉãÅ[Éã #1 Ç…ëŒÇ∑ÇÈà·îΩÇÃÇÊǧǻìÆçÏÇ≈Ç∑ÅB


éñó·Ç…ÇÊÇÈèÿñæ
DZDZÇ≈ÇÕÅA2 ǬÇÃéñó·Çí ÇµÇƒÅAÉãÅ[ÉãÇ…à·îΩÇ∑ÇÈÇΔÅAÇ«ÇÃÇÊǧDžǵǃÉVÉXÉeÉÄÇ™ÉfÉbÉhÉçÉbÉNÇ…ä◊ÇÈÇ©Çê‡ñæÇµÇ‹Ç∑ÅBDZÇÍÇÁ 2 ǬÇÃéñó·ÇÕÅAéüÇÃÇÊǧǻÉVÉiÉäÉIÇ…äÓÇ√ǢǃǢNjÇ∑ÅB

"ãå" AppleTalk ÉfÉoÉCÉXÉhÉâÉCÉoÇégǡǃÅAÉlÉbÉgÉèÅ[ÉNåoóRÇ≈ÉfÉBÉXÉNÉuÉçÉbÉNÇÉtÉFÉbÉ`Ç∑ÇÈÉuÉçÉbÉNÉfÉoÉCÉXÉhÉâÉCÉoÇèëÇ¢ÇΩÇΔǵNjÇ∑ÅBFinder ÇégǡǃÅAÉtÉ@ÉCÉãÇÉfÉBÉXÉNÉCÉÅÅ[ÉWÇ…ÉRÉsÅ[Ç∑ÇÈÇΔÇ´ÅAÉVÉXÉeÉÄÇ™ vSyncWait ÇΔǢǧñºëOÇÃÉãÅ[É`ÉìÇ≈ÇΔǴǫǴÉfÉbÉhÉçÉbÉNÇ…ä◊ÇËÇ‹Ç∑ÅBDZÇÃÇÊǧǻéñë‘ÇÕÅAãåÉlÉbÉgÉèÅ[ÉNÇé¿çsǵǃǢÇÈÇΔÇ´ÇÊÇËLJÅAOpen Transport Çé¿çsǵǃǢÇÈÇΔÇ´ÇÃï˚Ç™ÇÊÇËïpî…Ç…î≠ê∂ǵNjÇ∑ÅB

ç≈ãflÅADZÇÃÇÊǧǻÉhÉâÉCÉoÇèëǢǃǢÇÈâΩêlÇ©Çà Macintosh ÉfÉxÉçÉbÉpÇ©ÇÁÇÃñ‚çáÇπÇ…ëŒâûǵÇΩåoå±Ç©ÇÁÅADZÇÃéñó·ÇëIǗNjǵÇΩÅBDZÇÍÇÁÇÃÉfÉxÉçÉbÉpÇÕÉãÅ[ÉãÇ…à·îΩǵǃǢNjǵÇΩÇ™ÅAÇ∑Ç◊ǃǙê≥èÌÇ…ìÆçÏÇ∑ÇÈÇΔévÇ¢çûÇÒÇ≈ǢNjǵÇΩÅBécîOǻǙÇÁÅAOpen Transport ÇÕÅAAppleTalk Ç™ÉCÉìÉvÉäÉÅÉìÉgÇ≥ÇÍÇÈï˚ñ@ÇëÂïùÇ…ïœçXǵNjǵÇΩÅBǪÇÃåãâ ÅAÇÌÇÍÇÌÇÍÇÕÅAó\ä˙ǵǻǢÉVÉXÉeÉÄÇÃÉfÉbÉhÉçÉbÉNÇΔǢǧÅAÉãÅ[Éãà·îΩÇÃÉyÉiÉãÉeÉBÇìÀëRî≠å©Ç∑ÇÈDZÇΔÇ…Ç»ÇËNjǵÇΩÅB

ÉtÉ@ÉCÉãÇÉRÉsÅ[Ç∑ÇÈÇΔÇ´ÅAFinder ÇÕÅAÉ\Å[ÉXÉ{ÉäÉÖÅ[ÉÄÇ©ÇÁÉfÅ[É^ÇÃÉ`ÉÉÉìÉNÇì«Ç›çûÇ›ÅAǪÇÍÇÁÇÉfÉXÉeÉBÉlÅ[ÉVÉáÉìÉ{ÉäÉÖÅ[ÉÄÇ…èëÇ´çûÇfiÅAòAë±Ç∑ÇÈ ioCompletion ÇÃÉVÅ[ÉPÉìÉXÇçÏê¨ÇµÇ‹Ç∑ (è⁄ç◊DžǬǢǃÇÕÅAdevelop 13 Çà "Asynchronous Routines on the Macintosh" ÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢)ÅBFinder ÇÕé¿ç€Ç…ÇÕÅAFile Manager åƒÇ—èoǵÇé¿çsǵNjÇ∑Ç™ÅADZÇÃÇÊǧǻèÍçáÅAFile Manager ÇÕå¯ó¶Çè„Ç∞ÇÈÇΩÇflÇ…ÅADZÇÍÇÁÇÃåƒÇ—èoǵÇìKêÿÇ»ÉuÉçÉbÉNÉfÉoÉCÉXÉhÉâÉCÉoÇ…íºê⁄ìnǵNjÇ∑ÅB

éüÇà 2 ǬÇÃéñó·Ç≈ÇÕÅAÉuÉçÉbÉNÉfÉoÉCÉXÉhÉâÉCÉoÇ™ëOèqÇÃÉãÅ[ÉãDžǵÇΩÇ™ÇÌǻǢDZÇΔÇ≈ÅAÇ«ÇÃÇÊǧDžǵǃÉVÉXÉeÉÄÇ™ÉfÉbÉhÉçÉbÉNÇ…ä◊ÇÈÇ©Çé¶ÇµÇ‹Ç∑ÅB


ÉãÅ[Éã #1 Ç…ëŒÇ∑ÇÈà·îΩÇÃéñó·
ÉfÉoÉCÉXÉhÉâÉCÉoÇ™ÉãÅ[Éã #1 Ç…à·îΩǵǃǢÇÈÅAǬNjÇËÉfÉoÉCÉXÉhÉâÉCÉoÇ™ï ÇÃÉfÉoÉCÉXÉhÉâÉCÉoÇìØä˙ìIÇ…åƒÇ—èoÇ∑ÇΔâºíËǵNjÇ∑ÅBéüÇ…ÅADZÇÃà·îΩǙǫÇÃÇÊǧDžÉVÉXÉeÉÄÇÃÉfÉbÉhÉçÉbÉNÇ…éäÇÈÇ©ÇíiäKìIÇ…ê‡ñæÇµÇ‹Ç∑ÅB

1. Finder ÇÕ PBReadAsync ÇåƒÇ—èoǵǃÅAÉçÅ[ÉJÉãÉnÅ[ÉhÉfÉBÉXÉNÇ©ÇÁÉtÉ@ÉCÉãÇÃÉ`ÉÉÉìÉNÇì«Ç›çûǛNjÇ∑ÅBDZÇÍÇ…ÇÊÇË File Manager Ç™åƒÇ—èoÇ≥ÇÍÇ‹Ç∑ÅBFile Manager ÇÕÉfÉoÉCÉXÉhÉâÉCÉoÇåƒÇ—èoǵÅAÉfÉoÉCÉXÉhÉâÉCÉoÇÕ SCSI Manager ÇåƒÇ—èoǵÅASCSI Manager ÇÕÇ≥ÇÁÇ… SCSI ÉnÅ[ÉhÉEÉFÉAÇãNìÆÇµÇ‹Ç∑ÅB

2. SCSI ÉIÉyÉåÅ[ÉVÉáÉìÇ™äÆóπǵNjÇ∑ÅBSCSI ÉnÅ[ÉhÉEÉFÉAÇÕ CPU Ç…äÑÇËçûÇ›ÅAÉIÉyÉåÅ[ÉVÉáÉìÇ™äÆóπǵÇΩDZÇΔÇ CPU Ç…í ímǵNjÇ∑ÅBäÑÇËçûÇ›ÉTÅ[ÉrÉXÉãÅ[É`ÉìÇÕÅASCSI ÉfÉoÉCÉXÉhÉâÉCÉoÇ…ëŒÇ∑ÇÈ ioCompletion ÇåƒÇ—èoǵNjÇ∑ÅBSCSI ÉfÉoÉCÉXÉhÉâÉCÉoÇÕ File Manager Ç…ëŒÇ∑ÇÈ ioCompletion ÉãÅ[É`ÉìÇåƒÇ—èoǵÅAÇ≥ÇÁÇ… File Manager ÇÕ Finder Ç…ëŒÇ∑ÇÈ ioCompletion ÉãÅ[É`ÉìÇåƒÇ—èoǵNjÇ∑ÅBäÑÇËçûÇ›ÉTÅ[ÉrÉXÉãÅ[É`ÉìÇÃê´éøè„ÅADZÇÃéûì_Ç≈ÇÕäÑÇËçûÇ›ÇÕÇ‹Çæñ≥å¯Ç…Ç≥ÇÍÇΩNjNjÇ≈Ç∑ÅB

3. Finder Çà ioCompletion ÉãÅ[É`ÉìÇÕ PBWriteAsync ÇåƒÇ—èoǵǃÅAÉuÉçÉbÉNÉfÉoÉCÉXÉhÉâÉCÉoè„Ç…É}ÉEÉìÉgÇ≥ÇÍǃǢÇÈÉ{ÉäÉÖÅ[ÉÄÇ…ÉfÅ[É^ÇèëÇ´çûǛNjÇ∑ÅBDZÇÍÇ…ÇÊÇË File Manager Ç™åƒÇ—èoÇ≥ÇÍÅAFile Manager ÇÕÉfÉoÉCÉXÉhÉâÉCÉoÇåƒÇ—èoǵNjÇ∑ÅB

4. ÉfÉoÉCÉXÉhÉâÉCÉoÇ™ AppleTalk ÉfÉoÉCÉXÉhÉâÉCÉoÇìØä˙ìIÇ…åƒÇ—èoǵNjÇ∑ÅBDZÇÍÇÉäÉNÉGÉXÉg A ÇΔǵNjÇ∑ÅBécîOǻǙÇÁÅAAppleTalk ÉfÉoÉCÉXÉhÉâÉCÉoÇÕÅAäÆëSÇ…ìΔóßǵÇΩÉvÉçÉZÉXÇ©ÇÁÇÃï ÇÃÉäÉNÉGÉXÉg (ÉäÉNÉGÉXÉg B) ÇèàóùÇ∑ÇÈÇΩÇflÇ…ÉrÉWÅ[Ç≈Ç∑ÅBDZÇÃÇΩÇflÅAÉäÉNÉGÉXÉg A ÇÕÉLÉÖÅ[Ç…ì¸ÇËÅAÉäÉNÉGÉXÉg B Ç™äÆóπÇ∑ÇÈÇÃÇë“ÇøÇ‹Ç∑ÅBÉRÅ[ÉhÇÕ Device Manager Çà vSyncWait ÉãÅ[ÉvÇÃì‡ïîÇ…ì¸ÇËÅAÉäÉNÉGÉXÉg B ÇÃäÆóπÇë“ÇøÇ‹Ç∑ÅB

5. êÊçsÇ∑ÇÈÉlÉbÉgÉèÅ[ÉLÉìÉOÉIÉyÉåÅ[ÉVÉáÉì (ÉäÉNÉGÉXÉg B) Ç™äÆóπǵNjÇ∑ÅBÉlÉbÉgÉèÅ[ÉLÉìÉOÉnÅ[ÉhÉEÉFÉAÇÕ CPU Ç…äÑÇËçûÇÒÇ≈ÅAÉäÉNÉGÉXÉg B Ç™äÆóπǵÇΩDZÇΔÇ CPU Ç…ímÇÁÇπÇÊǧÇΔǵNjÇ∑ÅBǵǩǵécîOǻǙÇÁÅACPU ÇÕäÑÇËçûǛǙñ≥å¯Ç…Ç≥ÇÍǃǢÇÈ vSyncWait ÇÃì‡ïîÇ…ì¸Ç¡ÇƒÇ®ÇË (SCSI ÉnÅ[ÉhÉEÉFÉAÇ™ÉXÉeÉbÉv 2 Ç≈ CPU Ç…äÑÇËçûÇÒÇæÇΔÇ´ÅAäÑÇËçûÇ›ÇÕ SCSI ÉnÅ[ÉhÉEÉFÉAÇ…ÇÊǡǃñ≥å¯Ç…Ç≥ÇÍÇΩNjNjÇ≈Ç∑)ÅAÉlÉbÉgÉèÅ[ÉLÉìÉOÉnÅ[ÉhÉEÉFÉAÇ©ÇÁÇÃäÑÇËçûÇ›ÇîFéØÇµÇ‹ÇπÇÒÅBÉVÉXÉeÉÄÇÕÉfÉbÉhÉçÉbÉNÇ…ä◊ÇËÇ‹Ç∑ÅB

DZÇÃèÍçáÇÃäÓñ{ìIÇ»ñ‚ëËì_ÇÕÅAì`ìùìIÇ» Mac OS ÉfÉoÉCÉXÉhÉâÉCÉoÇ™ÉVÉìÉOÉãÉXÉåÉbÉhÇ≈džÇÈÅAǬNjÇËÅAàÍìxÇ… 1 ǬÇÃÉäÉNÉGÉXÉgǵǩèàóùÇ≈ǴǻǢDZÇΔÇ≈Ç∑ÅBëÊ 2 ÇÃÉäÉNÉGÉXÉgÇçsÇ¢ÅAÉhÉâÉCÉoÇ™ÉrÉWÅ[Ç≈ÅAÉhÉâÉCÉoÇ…ÉäÉNÉGÉXÉgÇäÆóπÇ∑ÇÈã@î\Çó^ǶǃǢǻǢèÍçáÅAÉfÉbÉhÉçÉbÉNÇ…ä◊ÇËÇ‹Ç∑ÅB


ÉãÅ[Éã #2 Ç…ëŒÇ∑ÇÈà·îΩÇÃéñó·
ÉfÉoÉCÉXÉhÉâÉCÉoÇ™ÉãÅ[Éã #2 Ç…à·îΩǵǃǢÇÈÅAǬNjÇËÉfÉoÉCÉXÉhÉâÉCÉoÇ™ìØä˙ìIÇ…åƒÇ—èoÇ≥ÇÍǃǢÇÈÇ©ÅAîÒìØä˙ìIÇ…åƒÇ—èoÇ≥ÇÍǃǢÇÈÇ©ÇÉeÉXÉgǵÅAǪÇÍǺÇÍÇÃèÍçáÇ≈àŸÇ»ÇÈìÆçÏÇé¿çsÇ∑ÇÈÇΔâºíËǵNjÇ∑ÅBéüÇ…ÅADZÇÃà·îΩǙǫÇÃÇÊǧDžÉVÉXÉeÉÄÇÃÉfÉbÉhÉçÉbÉNÇ…éäÇÈÇ©ÇíiäKìIÇ…ê‡ñæÇµÇ‹Ç∑ÅB
1. Finder ÇÕ PBWriteAsync ÇåƒÇ—èoǵǃÅAÉfÅ[É^ÇÃÉ`ÉÉÉìÉNÇÉuÉçÉbÉNÉfÉoÉCÉXÉhÉâÉCÉoÇ…èëÇ´çûǛNjÇ∑ (ÉäÉNÉGÉXÉg A)ÅBDZÇÃÉäÉNÉGÉXÉgÇ™îÒìØä˙ìIÇ≈džÇÈÇΔîªíËÇ≥ÇÍÇΩÇÃÇ≈ (ParamBlock Çà ioTrap ÇÉeÉXÉgǵǃ)ÅADZÇÃÉäÉNÉGÉXÉgÇîÒìØä˙ìIÇ… AppleTalk Ç…ëóêMǵÅAǪÇÃå„ Finder Ç…ñflÇËÇ‹Ç∑ÅB

2. ï ÇÃÉvÉçÉZÉXÇ™ PBWriteSync ÇåƒÇ—èoǵǃÅAàÍïîÇÃÉfÅ[É^ÇÉhÉâÉCÉoÇ…èëÇ´çûǛNjÇ∑ (ÉäÉNÉGÉXÉg B)ÅBÉhÉâÉCÉoÇ™åªç›ÉrÉWÅ[Ç≈džÇÈÇΩÇflÅADZÇÃÉäÉNÉGÉXÉgÇÕÉhÉâÉCÉoÇÃÉLÉÖÅ[Ç…äiî[Ç≥ÇÍÇ‹Ç∑ÅB

3. AppleTalk ÉhÉâÉCÉoÇÕ ioCompletion ÉãÅ[É`ÉìÇåƒÇ—èoǵǃÅAÉäÉNÉGÉXÉgÇ™äÆóπǵÇΩDZÇΔÇé¶ÇµÇ‹Ç∑ÅBDZÇÍÇ…âûìöǵǃ jIODone ÇåƒÇ—èoǵNjÇ∑ÅBjIODone ÇÕÉäÉNÉGÉXÉg A ÇäÆóπǵ (Ç≥ÇÁÇ…ÅAFinder Çà ioCompletion ÉãÅ[É`ÉìÇåƒÇ—èoǵ)ÅAÇ≥ÇÁÇ…ÉhÉâÉCÉoÇÃÉLÉÖÅ[ÇÉ`ÉFÉbÉNǵǃÅAÉyÉìÉfÉBÉìÉODžǻǡǃǢÇÈÉäÉNÉGÉXÉgÇíTǵNjÇ∑ÅBÉäÉNÉGÉXÉg B Ç™ÉyÉìÉfÉBÉìÉODžǻǡǃǢÇÈDZÇΔÇ™åüèoÇ≥ÇÍÅAjIODone ÇÕÉfÉoÉCÉXÉhÉâÉCÉoÇà Prime ÇåƒÇ—èoǵǃÅAǪÇÃÉäÉNÉGÉXÉg Ça ÇäJénǵNjÇ∑ÅBÇ‹ÇæäÑÇËçûÇ›éûÇ≈džÇÈDZÇΔÇévÇ¢èoǵǃÇ≠ÇæÇ≥Ç¢ÅB

4. ÉfÉoÉCÉXÉhÉâÉCÉoÇ™åƒÇ—èoÇ≥ÇÍÅAÉäÉNÉGÉXÉg Ça Ç™äJénÇ≥ÇÍÇ‹Ç∑ÅBÉfÉoÉCÉXÉhÉâÉCÉoÇÕÅAioTrap ÇÉeÉXÉgǵǃÅAÉäÉNÉGÉXÉg Ça Ç™ìØä˙ìIÇ≈džÇÈDZÇΔÇîFéØÇµÇ‹Ç∑ÅBǪÇÃåãâ ÅAAppleTalk ÇìØä˙ìIÇ…åƒÇ—èoǵNjÇ∑ÅBDZÇÃéûì_Ç≈ÅAÉhÉâÉCÉoÇÕäÑÇËçûÇ›éûÇ…ÉfÉoÉCÉXÉhÉâÉCÉoÇìØä˙ìIÇ…åƒÇ—èoÇ∑DZÇΔÇ…Ç»ÇËÅAÉãÅ[Éã #1 ÇÃà·îΩÇÃéñó·ÇΔìØólÇ…ÅAÉVÉXÉeÉÄÇ™ÉfÉbÉhÉçÉbÉNÇ…ä◊ÇÈDZÇΔÇ…Ç»ÇËÇ‹Ç∑ÅB
DZÇÃèÍçáÇÃäÓñ{ìIÇ»ñ‚ëËì_ÇÕÅAParamBlock Çà ioTrap ÉèÅ[ÉhÇ™ÉäÉNÉGÉXÉgÇ™ìØä˙ìIÇ…çsÇÌÇÍÇΩǩǫǧǩÇé¶Ç∑ÇæÇØÇ≈ÅAÉäÉNÉGÉXÉgÇ™îÒäÑÇËçûÇ›éûÇ…é¿çsÇ≥ÇÍǃǢÇÈǩǫǧǩÇé¶Ç≥ǻǢDZÇΔÇ≈Ç∑ÅB


ÉfÉbÉhÉçÉbÉNÇÃâÒî
ëOèqÇÃñ‚ëËÇâÒîÇ∑ÇÈóBàÍÇÃï˚ñ@ÇÕÅAÉfÉoÉCÉXÉhÉâÉCÉoÇÃì‡ïîÇ≈îÒìØä˙ìIÇ…é¿çsÇ≥ÇÍÇÈÉfÉoÉCÉXÉhÉâÉCÉoåƒÇ—èoǵÇî≠çsÇ∑ÇÈDZÇΔÇ≈Ç∑ÅB

ï ÇÃÉhÉâÉCÉo (DRVR B) ÇåƒÇ—èoÇ∑ì`ìùìIÇ» Mac OS ÉfÉoÉCÉXÉhÉâÉCÉo (DRVR A) Ç™ÅAéüÇÃÇÊǧǻÉIÉyÉåÅ[ÉVÉáÉìÇé¿çsÇ∑ÇÈÇÊǧDžǵNjÇ∑ÅB
1. ÉäÉNÉGÉXÉg (ÉäÉNÉGÉXÉg A) ÇéÛÇØïtÇØÇ‹Ç∑ÅB

2. ÉäÉNÉGÉXÉgÇ™ìØä˙ìIÇ≈džÇÈÇ©îÒìØä˙ìIÇ≈džÇÈÇ©ÇÕñ≥éãǵNjÇ∑ÅB

3. îÒìØä˙ìIÇ… DRVR B Ç÷ÇÃÉTÉuÉäÉNÉGÉXÉg (ÉäÉNÉGÉXÉg B1) Çî≠çsǵNjÇ∑ÅB

4. åƒÇ—èoǵå≥Ç…ñflÇËÇ‹Ç∑ÅB
ÉTÉuÉäÉNÉGÉXÉgÇÕ ioCompletion ÉãÅ[É`ÉìÇéùǡǃǢÇÈÇΔǵNjÇ∑ÅBǪÇà ioCompletion ÉãÅ[É`ÉìÇÃÉRÅ[ÉhÇÕéüÇÃÇÊǧDžìÆçÏÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅB
1. DZÇÍÇ™ÅAÉäÉNÉGÉXÉg A ÇêãçsÇ∑ÇÈÇΩÇflÇ…é¿çsÇ∑ÇÈïKóvÇÃdžÇÈç≈å„ÇÃÉIÉyÉåÅ[ÉVÉáÉìÇ≈džÇÈèÍçáÅAjIODone Ç…ÉWÉÉÉìÉvǵNjÇ∑ÅB

2. ǪǧÇ≈ǻǢèÍçáÇÕÅAìØÇ∂ ioCompletion ÉãÅ[É`ÉìÇégǡǃÅADRVR B Ç÷ÇÃï ÇÃÉTÉuÉäÉNÉGÉXÉg (ÉäÉNÉGÉXÉg Bn) Çî≠çsǵÅAǪÇÃå„ÅAåƒÇ—èoǵå≥Ç…ñflÇËÇ‹Ç∑ÅB
DZÇÃÇÊǧǻï˚ñ@Ç≈ÉfÉoÉCÉXÉhÉâÉCÉoÇç\ë¢âªÇ∑ÇÈÇΔÅAÉfÉoÉCÉXÉhÉâÉCÉoÇÉXÉeÅ[É^ÉXÉ}ÉVÉìÇ…ïœÇ¶ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBÇΩÇΔǶnjÅAéÛÇØéÊÇ¡ÇΩǪÇÍǺÇÍÇÃÉäÉNÉGÉXÉgÇ…ëŒÇµÇƒ2 ǬÇÃÉTÉuÉäÉNÉGÉXÉgÇî≠çsÇ∑ÇÈïKóvǙdžÇÈèÍçáÅAÉfÉoÉCÉXÉhÉâÉCÉoÇÕÅAç≈èIìIÇ…ÉäÉNÉGÉXÉgB1ÅAÇ®ÇÊÇ—ÉäÉNÉGÉXÉgÇÕ B2 ÇΔǢǧ 2 ǬÇÃÉXÉeÅ[É^ÉXÇèàóùǵNjÇ∑ÅBäÆóπÉãÅ[É`ÉìÇÕéüÇÃÇÊǧDžìÆçÏÇ∑ÇÈDZÇΔÇ…Ç»ÇËÇ‹Ç∑ÅB
1. äÆóπǵÇΩÉTÉuÉäÉNÉGÉXÉgÇ©ÇÁÉÅÉCÉìÉäÉNÉGÉXÉgÇÃÉäÉUÉãÉgÉoÉbÉtÉ@ÇÃíÜÇ…ÉfÅ[É^ÇÉRÉsÅ[ǵNjÇ∑ÅB

2. ÉXÉeÅ[É^ÉXÇ™ Request B2 Ç≈džÇÈèÍçáÅAjIODone Ç…ÉWÉÉÉìÉvÇ∑ÇÈDZÇΔÇ≈ç≈èâÇÃÉäÉNÉGÉXÉgÇäÆóπǵNjÇ∑ÅB

3. ǪǧÇ≈ǻǢèÍçáÇÕÅAÉXÉeÅ[É^ÉXÇÉCÉìÉNÉäÉÅÉìÉgǵÅAéüÇÃÉäÉNÉGÉXÉgÇîÒìØä˙ìIÇ…î≠çsǵÅAåƒÇ—èoǵå≥Ç…ñflÇËÇ‹Ç∑ÅB
DZÇÃç\ë¢ÇÕÅAÉhÉâÉCÉo (DRVR A) Ç™ìØä˙ìIÇ…åƒÇ—èoÇ≥ÇÍÇÈÇ©îÒìØä˙ìIÇ…åƒÇ—èoÇ≥ÇÍÇÈǩDžä÷åWÇ»Ç≠ÅAÇ‹ÇΩåƒÇ—èoǵǃǢÇÈÉhÉâÉCÉo(DRVR B) Ç™ìØä˙ìIÇ≈džÇÈÇ©îÒìØä˙ìIÇ≈džÇÈǩDžä÷åWÇ»Ç≠ÅAê≥èÌÇ…ìÆçÏǵNjÇ∑ÅB

ê} 1ÅA2ÅA3ÅAÇ®ÇÊÇ— 4 ÇÕÅADZÇÍÇÁ 4 ǬÇÃÉPÅ[ÉXÇê}é¶ÇµÇƒÇ¢Ç‹Ç∑ÅB

ê} 1Å@ÉhÉâÉCÉoÇ™ìØä˙ìIÇ…åƒÇ—èoÇ≥ÇÍÅAìØä˙ÉhÉâÉCÉoÇåƒÇ—èoÇ∑ÉPÅ[ÉX
figure1

ê} 2Å@ÉhÉâÉCÉoÇ™îÒìØä˙ìIÇ…åƒÇ—èoÇ≥ÇÍÅAìØä˙ÉhÉâÉCÉoÇåƒÇ—èoÇ∑ÉPÅ[ÉX
figure2

ê} 3Å@ÉhÉâÉCÉoÇ™ìØä˙ìIÇ…åƒÇ—èoÇ≥ÇÍÅAîÒìØä˙ÉhÉâÉCÉoÇåƒÇ—èoÇ∑ÉPÅ[ÉX
figure3

ê} 4Å@ÉhÉâÉCÉoÇ™îÒìØä˙ìIÇ…åƒÇ—èoÇ≥ÇÍÅAîÒìØä˙ÉhÉâÉCÉoÇåƒÇ—èoÇ∑ÉPÅ[ÉX
figure4

 ìØä˙ìIÇ…åƒÇ—èoÇ≥ÇÍǃǢÇÈÇÃÇ©ÅAîÒìØä˙ìIÇ…åƒÇ—èoÇ≥ÇÍǃǢÇÈÇÃÇ©ÇåüèoǵÅAǪÇÍǺÇÍÇÃÉPÅ[ÉXÇ≈ÉIÉyÉåÅ[ÉVÉáÉìÇïœÇ¶ÇÈÇΔÅAéñë‘ÇíPèÉâªÇ≈Ç´ÇÈÇΔLJçlǶÇÁÇÍÇ‹Ç∑ÅBÇΩǵǩDžDZÇÃï˚ñ@ÇÕóùò_ìIÇ…ÇÕÉGÉåÉKÉìÉgÇ»ÉAÉCÉfÉAÇ…ï∑DZǶÇÈǩLJǵÇÍÇ‹ÇπÇÒÇ™ÅAéüÇÃ2 ǬÇÃóùóRÇ©ÇÁé¿ç€Ç…ÇÕç≈à´ÇÃÉAÉCÉfÉAÇ≈Ç∑ÅB
1. Ç¢Ç∏ÇÍDžǵǃLJÅAîÒìØä˙ÇÃÉPÅ[ÉXÇìKêÿÇ…èàóùÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ÅBǪǵǃÅAîÒìØä˙ÇÃÉPÅ[ÉXÇìKêÿÇ…èàóùÇ∑ÇÍÇŒÅAìØä˙ÇÃÉPÅ[ÉXLJê≥èÌÇ…ìÆçÏǵNjÇ∑ÅBîºï™Ç≈è\ï™Ç…ìÆçÏÇ∑ÇÈÉRÅ[ÉhÇÇÌÇ¥ÇÌÇ¥2 ìxèëÇ≠ÇÃÇÕñ≥à”ñ°Ç≈Ç∑ÅB

2. ÉãÅ[Éã #2 Ç…à·îΩÇ∑ÇÈDZÇΔÇ…Ç»ÇËÅAåãâ ìIÇ…ÉfÉbÉhÉçÉbÉNÇÃâ¬î\ê´Ç™écÇ≥ÇÍÇΩNjNjDžǻÇËÇ‹Ç∑ÅB

ÉãÅ[ÉãÇèÿñæÇ∑ÇÈó·äO
"ÉãÅ[ÉãÇèÿñæÇ∑ÇÈó·äO" ÇΔǢǧï\åªÇÕÅAé¿ç€Ç…ÇÕó·äOÇ™ÉãÅ[ÉãÇÉeÉXÉgÇ∑ÇÈÇΔǢǧà”ñ°Ç≈Ç∑ÅBÉãÅ[Éã#1 ÇΔ #2 Ç…ÇÕÅA2 ǬÇÃèdóvÇ»ó·äOǙdžÇËÅADZÇÃÉgÉsÉbÉNÇ䯇¯Ç…óùâÇ∑ÇÈÇΩÇflÇ…ÇÕÅADZÇÍÇÁÇÃó·äOÇè⁄ǵÇ≠í≤Ç◊ǃǛÇÈïKóvǙdžÇËÇ‹Ç∑ÅB


îÒìØä˙ìIÇ…åƒÇ—èoÇ≥ÇÍǻǢÉhÉâÉCÉo: ó·äO #1
ëΩÇ≠ÇÃêlÇÕÅAÉÇÉfÉãÇ…çáívǵǻǢDZÇΔÇÃÇΩÇflÇ…ì`ìùìIÇ» Mac OS ÉfÉoÉCÉXÉhÉâÉCÉoÇégópǵǃǢNjÇ∑ÅBñæÇÁǩǻó·ÇdžÇ∞ÇÈÇΔÇ∑ÇÍÇŒÅAǪÇÍÇÕÉfÉXÉNÉAÉNÉZÉTÉäÇ≈Ç∑ÅBǵǩǵÅAå√Ç¢ÉvÉçÉOÉâÉÄÇ≈ÇÕÅAǵnjǵnjÉfÉoÉCÉXÉhÉâÉCÉoÇã§óLÉâÉCÉuÉâÉäÉÅÉJÉjÉYÉÄÇΔǵǃégópǵǃǢNjÇ∑ÅBDZÇÃï˚ñ@Ç≈égópÇ≥ÇÍÇÈÉhÉâÉCÉoÇÕÅAé¿ç€Ç…ÇÕI/O ÉVÉXÉeÉÄÇÃàÍïîÇ≈ÇÕÇ»Ç≠ÅAàÍî Ç…îÒìØä˙ìIÇ…åƒÇ—èoÇ≥ÇÍÇ‹ÇπÇÒÅBÉãÅ[ÉãÇÃíÜÇ…ÅA"îÒìØä˙ìIÇ…åƒÇ—èoÇ≥ÇÍÇÈèÍçá"ÇΔǢǧàÍêflǙdžÇÈÇÃÇÕDZÇÃÇΩÇflÇ≈Ç∑ÅB

ã§óLÉâÉCÉuÉâÉäÉÅÉJÉjÉYÉÄÇΔǵǃÉfÉoÉCÉXÉhÉâÉCÉoÇégópÇ∑ÇÈDZÇΔÇÕÇ≈Ç´ÇÈǩǨÇËîÇØÇƒÇ≠ÇæÇ≥Ç¢ÅBåªç›ÇÃMacintosh Ç…ÇÕïKóvÇ…âûÇ∂ÇΩÅAÇ¢Ç≠ǬǩÇÃåªé¿ÇÃã§óLÉâÉCÉuÉâÉäÉÅÉJÉjÉYÉÄÇ™ópà”Ç≥ÇÍǃǢNjÇ∑ÅB

íçà”:
DRVR Çã^éóã§óLÉâÉCÉuÉâÉäÇΔǵǃégópÇ∑ÇÈèÍçáÇÕÅAÉNÉâÉCÉAÉìÉgÇ…ÉhÉâÉCÉoÇÃåƒÇ—èoǵÇë¶ç¿Ç…î≠çsÇ≥ÇπǃÇ≠ÇæÇ≥Ç¢ (ÇΩÇΔǶnjÅAPBControlImmed)ÅBDZÇÍÇÁÇÃåƒÇ—èoǵÇÕíºê⁄ÉhÉâÉCÉoÇ…ëóêMÇ≥ÇÍÅAǢǩǻÇÈèÍçáLJÉLÉÖÅ[Ç…äiî[Ç≥ÇÍÇÈDZÇΔÇÕdžÇËÇ‹ÇπÇÒÅB



ÉNÉâÉVÉbÉN SCSI Manager: ó·äO #2
ÉãÅ[Éã #1 Ç…ñµèÇÇ∑ÇÈÇÊǧDžå©Ç¶ÇÈÉPÅ[ÉXÇÃàÍǬÇΔǵǃÅAFile Manager ÇΔ "ÉNÉâÉVÉbÉN" SCSI ÉfÉoÉCÉXÉhÉâÉCÉoÇΔÇÃä÷åWǙdžÇËÇ‹Ç∑ÅB"ÉNÉâÉVÉbÉN" ÇΔǢǧñºèÃÇÕÅASCSI Manager 4.3 à»ëOÇ…èëÇ©ÇÍÇΩ SCSI ÉfÉoÉCÉXÉhÉâÉCÉoÇéwǵǃǢNjÇ∑ÅBSCSI Manager Ç™îÒìØä˙ÉIÉyÉåÅ[ÉVÉáÉìÇÉTÉ|Å[ÉgǵǃǢǻǩǡÇΩÇΩÇflÅADZÇÍÇÁÇÃÉhÉâÉCÉoÇÕïKëRìIÇ…ìØä˙ÉhÉâÉCÉoÇ≈ǵÇΩÅB

ǪǧÇ∑ÇÈÇΔÅASCSI Manager Ç™ïKëRìIÇ…ìØä˙ìIÇ≈džǡǃLJÅAäÑÇËçûÇ›éûÇ… File Manager ÇåƒÇ—èoǵÅAFile Manager Ç™Ç≥ÇÁÇ…ÉfÉoÉCÉXÉhÉâÉCÉoÇåƒÇ—èoǵÅAÉfÉoÉCÉXÉhÉâÉCÉoÇ™ SCSI Manager ÇåƒÇ—èoÇ∑DZÇΔÇÕǪLJǪLJâ¬î\Ç»ÇÃÇ≈ǵÇÂǧǩÅB

DZÇÃñ‚ǢDžëŒÇ∑ÇÈìöÇÕä»íPÇ≈Ç∑ÅBFile Manager Ç…ÇÕÅADZÇÍÇÉTÉ|Å[ÉgÇ∑ÇÈÇΩÇflÇÃì¡éÍÇ»ÉRÅ[ÉhÇ™ä‹Ç‹ÇÍǃǢNjÇ∑ÅBîÒìØä˙ÉäÉNÉGÉXÉgÇî≠çsÇ∑ÇÈÇΔÇ´ÅAFile Manager ÇÕÅASCSI ÉnÅ[ÉhÉEÉFÉAÇ™Ç∑Ç≈Ç…égópÇ≥ÇÍǃǢÇÈǩǫǧǩÇÉ`ÉFÉbÉNǵNjÇ∑ÅBÇ∑Ç≈Ç…égópÇ≥ÇÍǃǢÇÈèÍçáÅAFile Manager ÇÕÅASCSI ÉnÅ[ÉhÉEÉFÉAÇ™çƒìxâï˙Ç≥ÇÍÇÈÇ‹Ç≈ÅAÉRÉ}ÉìÉhÇÃÉIÉyÉåÅ[ÉVÉáÉìÇíxâÑÇ≥ÇπÇ‹Ç∑ÅBDZÇÍÇ…ÇÊÇËêˆç›ìIÇ»ÉfÉbÉhÉçÉbÉNÇâÒîÇ∑ÇÈDZÇΔÇÕÇ≈Ç´Ç‹Ç∑Ç™ÅAÉãÅ[Éã #1 ÇÃê∏ê_Ç…ÇÕñµèÇÇ∑ÇÈDZÇΔÇ…Ç»ÇËÇ‹Ç∑ÅB

ÉäÉNÉGÉXÉgÇÕîÒìØä˙Ç≈džÇÈÇΩÇflÅAFile Manager ÇæÇØÇ™ÉäÉNÉGÉXÉgÇíxâÑÇ≥ÇπÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBFile Manager ÇìØä˙ìIÇ…åƒÇ—èoÇ∑ÇΔÅAÉfÉbÉhÉçÉbÉNÇ…ä◊ÇÈDZÇΔÇ…Ç»ÇËÇ‹Ç∑ÅB

óvñÒ
ëÂïîï™Çà Macintosh ÉvÉçÉOÉâÉ}ÇÕÅAÉãÅ[ÉãDžǵÇΩǙǡǃÉvÉçÉOÉâÉ~ÉìÉOÇçsǮǧÇΔǵǃǢNjÇ∑ÅBǵǩǵécîOǻDZÇΔÇ…ÅAì`ìùìIÇ» Mac OS ÉfÉoÉCÉXÉhÉâÉCÉoÇÃèÍçáÅAǪÇÃÉãÅ[ÉãÇÕÇŸÇΔÇÒÇ«É}ÉjÉÖÉAÉãâªÇ≥ÇÍǃǮÇÁÇ∏ÅAÇΔÇ´Ç…ÇÊǡǃÇÕóùâÇ∑ÇÈÇÃLJç¢ìÔÇ»èÛãµÇ≈Ç∑ÅBDZÇà TECHNOTE Ç≈ÇÕÅAì`ìùìIÇ» Mac OS ÉfÉoÉCÉXÉhÉâÉCÉoÇ…ÇΔǡǃèdóvÇ» 2 ǬÇÃÉãÅ[ÉãDžǬǢǃê‡ñæÇµÇ‹ÇµÇΩÅBDZÇÍÇÁÇÃÉãÅ[ÉãDžǵÇΩǙǧDZÇΔÇ≈ÅAÉVÉXÉeÉÄÇëSëÃÇΔǵǃÇÊÇËêMóäê´ÇÃçÇǢLJÇÃÇ…Ç∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB

éQçlï∂å£
  • develop 13, Asynchronous Routines on the Macintosh, by Jim Luther
  • Modern Operating Systems, by Andrew S. Tanenbaum, Prentice-Hall, 1992, ISBN 0-13-588187-0